﻿using System;
using System.Collections.Generic;
using System.Text;
using RC.ControlAcceso.BaseDatos;
using RC.ControlAcceso.BaseDatos.GestionHorariaTableAdapters;

namespace RC.ControlAcceso.ObjetosNegocio
{
    /// <summary>
    /// Clase de presentación
    /// </summary>
    public partial class CA2Area
    {
       
    }

    public partial class CA2Area
    {
        #region Atributos
        protected int _IdArea;
        protected int _ObjectIdHi;
        protected int _ObjectIdLo;
        protected string _Nombre;
        protected string _Observaciones;
        protected string _Estado;
        #endregion

        #region Propiedades
        public int IdArea
        {
            get
            {
                return _IdArea;
            }
            set
            {
                _IdArea = value;
            }
        }
        public int ObjectIdHi
        {
            get
            {
                return _ObjectIdHi;
            }
            set
            {
                _ObjectIdHi = value;
            }
        }
        public int ObjectIdLo
        {
            get
            {
                return _ObjectIdLo;
            }
            set
            {
                _ObjectIdLo = value;
            }
        }
        public string Nombre
        {
            get
            {
                return _Nombre;
            }
            set
            {
                _Nombre = value;
            }
        }
        public string Observaciones
        {
            get
            {
                return _Observaciones;
            }
            set
            {
                _Observaciones = value;
            }
        }
        public string Estado
        {
            get
            {
                return _Estado;
            }
            set
            {
                _Estado = value;
            }
        }

        //Propiedades derivadas

        #endregion

        #region Interfase DAL
        //objeto de la capa DAL
        
        private static CAAreaTableAdapter _AreaAD;
        protected static CAAreaTableAdapter Adaptador
        {
            get
            {
                if (_AreaAD == null)
                    _AreaAD = new CAAreaTableAdapter();

                return _AreaAD;
            }
        }
        public static CA2Area ObtenerPorID(int pIDNumeroArea)
        {
            CA2Area _Area = null;

            GestionHoraria.CAAreaDataTable _dt;

            // obtengo el elemento por ID
            CAAreaTableAdapter _adaptador = new CAAreaTableAdapter(); // lo creo aca por que este es un metodo estatico
            _dt = _adaptador.ObtenerPorId(pIDNumeroArea);

            // si tiene algo,
            if (_dt.Rows.Count > 0)
                _Area = AsignarRowAObjeto((GestionHoraria.CAAreaRow)_dt.Rows[0]);

            return _Area;
        }
        protected static CA2Area AsignarRowAObjeto(GestionHoraria.CAAreaRow pRow)
        {
            CA2Area _Area = null;
            if (pRow != null)
            {
                _Area = new CA2Area();
                _Area.IdArea = pRow.IDArea;
                _Area.ObjectIdHi = pRow.ObjectIdHi;
                _Area.ObjectIdLo = pRow.ObjectIdLo;
                _Area.Nombre = pRow.Nombre;
                _Area.Observaciones = pRow.Observaciones;
                _Area.Estado = pRow.Estado;
            }
            return _Area;
        }
        public static CA2Area Insertar(int pObjectIdHi,int pObjectIdLo,string pNombre,string pObservaciones,string pEstado)
        {
            int _IdAreaNueva = int.Parse(Adaptador.Insertar(pObjectIdHi, pObjectIdLo, pNombre, pObservaciones, pEstado).ToString());
            CA2Area _area = CA2Area.CrearArea(_IdAreaNueva);
            return _area;
        }
        public static bool Actualizar(int pObjectIdHi, int pObjectIdLo, string pNombre, string pObservaciones, string pEstado, int pIdArea)
        {
            if (pIdArea == 0)
                return false;

            if (0 < Adaptador.Actualizar(pObjectIdHi, pObjectIdLo, pNombre, pObservaciones, pEstado, pIdArea))
                return true;
            else
                return false;
        }
        /// <summary>
        /// El resultado indica si el registro se elimino o no.
        /// </summary>
        /// <param name="pId"></param>
        /// <returns>Indica si el registro se elimino o no.</returns>
        public static bool Eliminar(int pId)
        {
            if (Adaptador.Eliminar(pId) == 0)
                return false;
            else
                return true;
        }
        //public static CA2AreaColeccion ObtenerPorEstado(int pEstado)
        //{
        //    GestionHoraria.CAAreaDataTable _dt;

        //    CAAreaTableAdapter _adaptador = new CAAreaTableAdapter(); // lo creo aca por que este es un metodo estatico
        //    _dt = _adaptador.ObtenerPorEstado(pEstado);

        //    return AsignarAreaTableAdapterAAreaColeccion(_dt);

        //}
        public static CA2AreaColeccion ObtenerTodas()
        {
            GestionHoraria.CAAreaDataTable _dt;

            CAAreaTableAdapter _adaptador = new CAAreaTableAdapter(); // lo creo aca por que este es un metodo estatico
            _dt = _adaptador.ObtenerTodas();

            return AsignarAreaTableAdapterAAreaColeccion(_dt);

        }
        protected static CA2AreaColeccion AsignarAreaTableAdapterAAreaColeccion(GestionHoraria.CAAreaDataTable pDataTable)
        {
            CA2AreaColeccion _Areas = new CA2AreaColeccion();
            CA2Area _Area;

            if ((pDataTable != null)
                && (pDataTable.Rows.Count > 0))
            {
                foreach (GestionHoraria.CAAreaRow _row in pDataTable.Rows)
                {
                    _Area = AsignarRowAObjeto(_row);
                    if (_Area != null)
                        _Areas.Add(_Area);
                }
            }
            return _Areas;
        }
        public bool Actualizar()
        {
            return Actualizar(ObjectIdHi, ObjectIdLo, Nombre, Observaciones, Estado, IdArea);
        }
        public CA2Area Insertar()
        {
            return Insertar(ObjectIdHi, ObjectIdLo, Nombre, Observaciones, Estado);
        }
        public void Eliminar()
        {
            Eliminar(IdArea);
        }
        #endregion

        #region Métodos
        public CA2Area()
        {
            AsignarValoresIniciales();
        }
        public void AsignarValoresIniciales()
        {
            this.IdArea = -1;
            ObjectIdHi = -1;
            ObjectIdLo = -1;
            Nombre = "";
            Observaciones = "";
            Estado = "";
        }
        public static CA2Area CrearArea()
        {
            CA2Area _Area = new CA2Area();
            return _Area;
        }
        /// <summary>
        /// El id de la Area es el mismo que el numero de Area(es el mismo campo)
        /// </summary>
        /// <param name="pID"></param>
        /// <returns></returns>
        public static CA2Area CrearArea(int pID)
        {
            CA2Area _Area = ObtenerPorID(pID);
            return _Area;
        }
        #endregion

        #region Metodos para datasource
        public void Actualizar(CA2Area pArea)
        {
            if (pArea != null)
                pArea.Actualizar();
        }
        public CA2Area Insertar(CA2Area pArea)
        {
            if (pArea != null)
                return pArea.Insertar();
            return null;
        }
        public void Eliminar(CA2Area pArea)
        {
            pArea.Eliminar();
            pArea = null;
        }
        #endregion

        //private enum ValidarPara
        //{
        //    Nueva,
        //    Actualizar
        //}
        //private bool ValidarAreaParaInsertar(int pNumero)
        //{
        //    //Verifico que la Area no exista.
        //    CA2Area _Area = CA2Area.CrearArea(pNumero);
        //    if (_Area != null)
        //    {
        //        throw new ArgumentException("La Area ya existe");
        //    }

        //    return true;
        //}
    }
    public class CA2AreaColeccion : System.Collections.CollectionBase
    {
        public void Add(CA2Area pArea)
        {
            this.List.Add(pArea);
        }
        public void AddUnico(CA2Area pArea)
        {
            foreach (CA2Area _Area in this)
                if (pArea.IdArea == _Area.IdArea)
                    return;
            this.List.Add(pArea);
        }
        public void Remove(int index)
        {
            if (index <= Count - 1 || index >= 0)
            {
                this.List.RemoveAt(index);
            }
            else
            {
                throw new System.ArgumentException("Fuera de rango", "original");
            }
        }
        public void Remove(CA2Area pArea)
        {
            for (int i = 0; i < this.Count; i++)
            {
                if (this[i].IdArea == pArea.IdArea)
                {
                    Remove(i);
                    return;
                }

            }
        }
        public CA2Area this[int index]
        {
            get { return ((CA2Area)(this.List[index])); }
            set { this.List[index] = value; }
        }
        //public CA2AreaColeccion ObtenerTodos(int pEstado)
        //{
        //    return CA2Area.ObtenerPorEstado(pEstado);
        //}

        #region Para datasource
        public static CA2AreaColeccion ObtenerAreaPorNumero(int pNumero)
        {
            CA2AreaColeccion _resultado = null;
            CA2Area _Area = CA2Area.CrearArea(pNumero);
            if (_Area != null)
            {
                _resultado = new CA2AreaColeccion();
                _resultado.Add(_Area);
            }

            return _resultado;
        }
        #endregion
    }
}
